package com.hxh.essaysharing.common;

import cn.hutool.core.util.IdUtil;
import cn.hutool.crypto.SecureUtil;
import org.springframework.util.StringUtils;

/**
 * @author 兴趣使然黄小黄
 * @version 1.0
 * @date 2023/7/24 17:01
 * 密码明文基于 MD5 随机盐值加密处理
 */
public class PasswordUtils {

    /**
     * 加密(加盐)
     * @param password 需要加密的密码
     * @return 盐值$加密的密码
     */
    public static String encrypt(String password) {
        // 随机盐值
        String salt = IdUtil.simpleUUID();
        // 密码 md5(随机盐值 + 密码)
        String encryptPassword = SecureUtil.md5(salt + password);
        return salt + "$" + encryptPassword;
    }

    /**
     * 解密
     * @param password          要验证的密码(未加密)
     * @param securePassword    数据库中加了盐值的密码
     * @return 返回密码是否正确
     */
    public static boolean decrypt(String password, String securePassword) {
        boolean result = false;
        if (StringUtils.hasLength(password) && StringUtils.hasLength(securePassword)) {
            if (securePassword.length() == 65 && securePassword.contains("$")) {
                String[] securePasswordArr = securePassword.split("\\$");
                // 盐值
                String salt = securePasswordArr[0];
                // 加密后的密码
                String encryptPassword = securePasswordArr[1];
                // 使用同样的 md5 与同样的盐值对 password 进行加密
                password = SecureUtil.md5(salt + password);
                // 比较是否相同
                return encryptPassword.equals(password);
            }
        }
        return result;
    }
}
